package cxydmmszl.chapter09.t163;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;
import java.util.Arrays;

/**
 * <li style="color: red;">Prob</li>
 * 累加出整个范围所有的数最少还需要几个数
 * <li style="color: green;">Desc</li>
 * 给定一个正数数组 arr 和一个正数 range，可以选择 arr 中的任意个数字加起来的和为 sum。
 * 返回最小需要往 arr 中添加几个数，使得 sum 可以取到 1∼range 范围上的每一个数。
 * 给出的数组不保证有序！
 * <br/><br/>备注：<br/>
 * 1⩽N⩽10^5<br/>
 * 1⩽arr[i]⩽10^9<br/>
 * 1⩽range⩽10^9
 * <li style="color: green;">Input</li>
 * 第一行一个整数 N, K。表示数组长度以及 range。
 * 接下来一行 N 个整数表示数组内的元素。
 * <li style="color: green;">Output</li>
 * 输出一个整数表示答案
 * <li style="color: blue;">Link</li> CD70
 *
 * @author habitplus
 * @since 2021-10-16 20:34
 */
public class Main {
    static final StreamTokenizer st =
            new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));

    static int nextInt() {
        try {
            st.nextToken();
            return (int) st.nval;
        } catch (Exception e) {
            throw new RuntimeException("input is invalid!");
        }
    }

    public static void main(String[] args) {
        int n = nextInt();
        int range = nextInt();
        int[] arr = new int[n];
        for (int i = 0; i < n; i++) {
            arr[i] = nextInt();
        }

        int ans = minNeeds(arr, range);
        System.out.println(ans);
    }

    private static int minNeeds(int[] arr, int range) {
        if (arr == null || arr.length == 0 || range < 1 ) return 0;

        /*
            排序 + 1,2,4,8,16,...
         */

        Arrays.sort(arr);

        int needs = 0;
        long touch = 0;
        int n = arr.length;
        for (int i = 0; i < n; i++) {
            while (arr[i] > touch + 1) {
                touch += touch + 1;
                needs++;
                if (touch >= range) return needs;
            }

            touch += arr[i];
            if (touch >= range) return needs;
        }

        while (touch < range) {
            touch += touch + 1;
            needs++;
        }

        return needs;
    }
}
